package hamsterteam.hop.ejb;

import hamsterteam.hop.model.Projet;
import java.util.List;
import javax.persistence.*;
import javax.ejb.Stateless;

@Stateless
public class ProjetEJB {

    // ======================================
    // =             Attributes             =
    // ======================================
    @PersistenceContext(unitName = "hopPU")
    private EntityManager em;

    // ======================================
    // =           Public Methods           =
    // ======================================
    public List<Projet> findAll() {
        Query query = em.createNamedQuery("Projet.findAll");
        return query.getResultList();
    }

    public List<Projet> findTexte(String recherche) {
        Query query = em.createQuery("SELECT p FROM Projet p WHERE LOWER(p.nom)"
                + " LIKE :r1 OR LOWER(p.nom) LIKE :r2 OR LOWER(p.nom) LIKE :r3"
                + " OR LOWER(p.nom) LIKE :r4 OR LOWER(p.description) LIKE :r1"
                + " OR LOWER(p.description) LIKE :r2 OR LOWER(p.description) LIKE :r3"
                + " OR LOWER(p.description) LIKE :r4");
        query.setParameter("r1", recherche.toLowerCase());
        query.setParameter("r2", "% "+recherche.toLowerCase());
        query.setParameter("r3", recherche.toLowerCase()+" %");
        query.setParameter("r4", "% "+recherche.toLowerCase()+" %");
        return query.getResultList();
    }

    public Projet findId(long selectedId) {
        Query query = em.createQuery("SELECT p FROM Projet p WHERE p.id = :idP");
        query.setParameter("idP", selectedId);
        return (Projet) query.getSingleResult();
    }

    public Projet create(Projet proj) {
        em.persist(proj);
        return proj;
    }

    public Projet update(Projet proj) {
        return em.merge(proj);
    }

    public void delete(List<Projet> list) {
        for (Projet proj : list) {
            delete(proj);
        }
    }

    public void delete(Projet proj) {
        em.remove(em.merge(proj));
    }
}
